<?php
namespace Admin\Controller;
use Think\Controller;
class GoodsController extends CommonController {

    /**
     * 商品列表
     *
     * @return void
     * @author
     **/
    public function lists(){

        $count=$this->Model->relation(true)->count();//查询满足要求的总记录数

        $Page=new \Think\Page($count,5);//实例化分页类,传入总记录数和每页显示的记录数(1)
        $Page->setConfig('prev','上一页');//上一页
        $Page->setConfig('last','尾页');//尾页

        $show=$Page->show();// 输出分页显示
        $list = $this->Model->relation(true)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
        $this->assign('list',$list);// 赋值数据集
        $this->assign('page',$show);// 赋值分页输出
        $this->display(); // 输出模板


    }

    /**
     * 添加商品
     *
     * @return void
     * @author
     **/
    function add()
    {

         //S('spec_item',null);//清除缓存

        //检测是否post提交
        if(IS_POST){
             // print_r(I('post.'));die;
              //图片上传
            if (!empty($_FILES['file'])) {//先判断有没有图片上传，如果有，则上传图片
                $upload = new \Think\Upload();// 实例化上传类
                $upload->maxSize   =     3145728 ;// 设置附件上传大小
                $upload->exts   =   array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

                $upload->savePath  = 'goods/'; // 设置附件上传目录

                $info   =   $upload->uploadOne($_FILES['file']);

                if(!$info) {
                    $this->error($upload->getError());
                }else{
                   $_POST['img']='./Uploads/'.$info['savepath'].$info['savename'];
                }
            }

             //把不需要的删除
             unset($_POST['spec_num']);//规格的库存
             unset($_POST['price']);//规格价格

             //商品编号自动生成
             $_POST['goods_no']=date('Ymd',$time).mt_rand(1000,9999);

            $id=$this->Model->add(I('post.'));//商品添加

             //语句添加成功，返回添加的数据id
             if ($id) {
                 // print_r(S('spec_item'));DIE;
                 // echo 1;die;
                 //循环添加商品规格价格表数据
                 //因为将数据存在缓存里面，使用要从缓存里面取
                 foreach (S('spec_item') as $key => $v) {
                     $v['spec_rules']=$id.$v['spec_rules'];//拼接，将商品id与规则拼接
                     $v['goods_id']=$id;
                    // print_r($v['spec_rules']); die;
                     D('spec_price')->add($v);

                     // echo  D('spec_price')->getLastSql();die;
                 }
                // die;
                 // echo $this->Model->getLastSql();die;
                 $this->success('添加成功',U('goods/lists'),1);die;
             }else{
                $this->error('添加失败','',3);die;
             }
        }

        //查询品牌
        $brand_list=D('brand')->select();
        $this->assign('brand_list',$brand_list);

        //查询分类
        $cate_list=D('cate')->select();
        $this->assign('cate_list',$cate_list);

        //查询类型
        $goods_type_list=D('goods_type')->select();
        $this->assign('goods_type_list',$goods_type_list);

        $this->display();
    }

    /**
     * 删除商品
     *
     * @return void
     * @author
     **/
    function del()
    {
        $id=I('get.id');
        $row=$this->Model->where("id=$id")->delete();

         if ($id>0) {
           $this->success('商品信息删除成功！','',1);die;
        }else{
             $this->error('商品信息删除失败！','',2);die;
        }
        $this->display();
    }


    /**
     * 商品相册
     *
     * @return void
     * @author
     **/
    function goods_img()
    {
     if (!empty($_FILES['file'])) {//先判断有没有图片上传，如果有，则上传图片
            $upload = new \Think\Upload();// 实例化上传类
            $upload->maxSize   =     3145728 ;// 设置附件上传大小
            $upload->exts   =   array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

            $upload->savePath  = 'goods/'; // 设置附件上传目录

            $info   =   $upload->uploadOne($_FILES['file']);

            if(!$info) {
                $this->error($upload->getError());
            }else{
               $data['url']='./Uploads/'.$info['savepath'].$info['savename'];
            }
            $data['goods_id']=I('id');//I方法可以自动识别传过去的参数的类型
            D('goods_img')->add($data);
        }

        $this->assign('id',I('get.id'));


        //查询商品相册列表
        $count=D('goods_img')->count();//查询满足要求的总记录数

        $Page=new \Think\Page($count,5);//实例化分页类,传入总记录数和每页显示的记录数(1)
        $Page->setConfig('prev','上一页');//上一页
        $Page->setConfig('last','尾页');//尾页

        $show=$Page->show();// 输出分页显示
        $img_list = D('goods_img')->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
        $this->assign('img_list',$img_list);// 赋值数据集
        $this->assign('page',$show);// 赋值分页输出

        // print_r($img_list);die;

        $this->display();
    }


    /**删除商品相册
     * undocumented function
     *
     * @return void
     * @author
     **/
    function del_img()
    {
        $id=I('get.id');

        $row=D('goods_img')->where("id=$id")->delete();
        // echo $row;die;
        if ($id>0) {
           $this->success('图片删除成功！','',1);die;
        }else{
             $this->error('图片删除失败！','',2);die;
        }
        $this->display();
    }


    /**
     * 商品信息导入
     *
     * @return void
     * @author
     **/
    function excel_put()
    {
        $upload = new \Think\Upload();// 实例化上传类
        $upload->maxSize   =     3145728 ;// 设置附件上传大小
        $upload->exts      =     array('xlsx','zip');// 设置附件上传类型
        $upload->savePath  =      '/goods/'; // 设置附件上传目录
        // 上传文件
        $info   =   $upload->uploadOne($_FILES['file']);

        // print_r($info);die;

        if(!$info) {// 上传错误提示错误信息
            $this->error($upload->getError());
        }else{// 上传成功

             // echo './Uploads'.$info['savepath'].$info['savename'];die;

            //取到上传的路径
          $zip_path= './Uploads'.$info['savepath'].$info['savename'];

            // $this->success('上传成功！');
        }

        //解压压缩文件，.rar压缩文件是解压不了的
        $zip=new \ZipArchive;//实例化解压类
        //判断文件是否解压
        if (!$zip->open($zip_path)) {//./Uploads/goods/2018-05-24/5b0696ca745fe.zip
            $zip->extractTo('./Uploads'.$info['savepath']);//解压文件存储路径
        }
        $zip->close();//关闭解压
die;

        //引入Excel第三方类库,PHPExcel文件下的PHPExcel文件
        Vendor('PHPExcel.PHPExcel');
        $phpexcel=new \PHPExcel_Reader_Excel2007;///实例化

        //excel文件加载方式
        $excel=$phpexcel->load($excel_path);
        // var_dump($excel);die;

        //获取excel文件内对应节点的数据
       $sheet= $excel->getSheet(0);

        // var_dump($sheet);die;

          $row= $sheet->getHighestRow();//获取sheet节点的数据中行数
          // echo  $row die;

        // 通过循环组装数组，存储到数据库中
        $goods=array();
        //2是表示从第二行开始导入数据
        for ($i=2; $i <=$row ; $i++) {
            //获取对应坐标单元格数据
            //getCellByColumnAndRow(列数,行数) 列从0开始 行从1开始
            //对应行数的对应数据
            $goods['goods_name']=(string)$sheet->getCellByColumnAndRow(0,$i)->getValue();
            $goods['goods_no']=(string)$sheet->getCellByColumnAndRow(1,$i)->getValue();
            $goods['shop_price']=(string)$sheet->getCellByColumnAndRow(2,$i)->getValue();
            $goods['marke_price']=(string)$sheet->getCellByColumnAndRow(3,$i)->getValue();
            $goods['img']=(string)$sheet->getCellByColumnAndRow(4,$i)->getValue();

            //因为数据库存储的是数字，而我们存在excel里的是中文
            //因此需要将数据库里对应的数字查询出来，才能存进数据库
            //在php 5.3版本下getByName($b_name)['id']中['id']是错误的，但在5.6版本下时可用的
            $b_name=(string)$sheet->getCellByColumnAndRow(5,$i)->getValue();
            $goods['brand_id']=D('brand')->getByName($b_name)['id'];

            $c_name=(string)$sheet->getCellByColumnAndRow(6,$i)->getValue();
            $goods['cate_id']=D('cate')->getByName($c_name)['id'];

            // print_r($goods);die;

            $this->Model->add($goods);

        }
    }

}